package com.yizhubao.app.activitys;

import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.yizhubao.app.MainActivity;
import com.yizhubao.app.R;
import com.yizhubao.app.activitys.home.ProdSwipeActivity;
import com.yizhubao.app.base.BaseActivityToolBar;
import com.yizhubao.app.base.BaseResultBean;
import com.yizhubao.app.beans.PayMessageBean;
import com.yizhubao.app.beans.WXLoginBean;
import com.yizhubao.app.customviews.BottomDialog;
import com.yizhubao.app.customviews.inter.OthersCallBack;
import com.yizhubao.app.events.PayEvent;
import com.yizhubao.app.models.WXLoginModel;
import com.yizhubao.app.presenters.PayPresenter;
import com.yizhubao.app.utils.Constants;
import com.yizhubao.app.utils.Utils;
import com.yizhubao.app.utils.net.BaseObserver;
import com.yizhubao.app.views.PayView;

import org.greenrobot.eventbus.EventBus;

import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import butterknife.BindView;
import butterknife.OnClick;
import h.framework.pacy.utils.LogUtil;
import h.framework.pacy.utils.ToastUtil;

/**
 * 创建人: PACY
 * 创建时间: 6/4/21 10:25 AM
 * 邮箱: pengwwe457621023@qq.com
 * 类描述: 支付页面
 */
public class PayActivity extends BaseActivityToolBar implements PayView {

    @BindView(R.id.addCheck_cb)
    CheckBox addCheck_cb;
    @BindView(R.id.addCheck_lin)
    LinearLayout addCheck_lin;
    @BindView(R.id.price_tv)
    TextView price_tv;

    @BindView(R.id.base_left_icon)
    ImageView leftIcon_iv;

    @BindView(R.id.agreement_tv)
    TextView agreement_tv;

    private List<PayMessageBean> messageBeans;

    PayPresenter payPresenter;
    private int type = 1;

    WXLoginModel loginModel;

    //是否选中加1元
    boolean addCheck = false;

    private int jumpType=3;//来源 1 保存内容页来的跳转到首页 2首页卡片跳转到详情页 3 个人中心来跳转到个人中心

    private String recordId;
    @Override
    protected int setContentLayout() {
        return R.layout.activity_pay;
    }

    @Override
    protected void initView() {
        setTitleOnLeftIcon(R.drawable.icon_back, "");
        jumpType=getIntent().getExtras().getInt("type");
        if(jumpType==2){
            recordId=getIntent().getExtras().getString("recordId");
        }
        addCheck_cb.setOnCheckedChangeListener((buttonView, isChecked) -> {
            addCheck = isChecked;
            checkUI();
        });

        leftIcon_iv.setOnClickListener(v -> {
            BottomDialog.DialogBuilder(PayActivity.this)
                    .title("重要提示")
                    .message("您还没有进行支付，平台提供的所有服务，都未生效。支付后，才能修改内容，和使用平台提供的功能服务！")
                    .cancleText("离开")
                    .othersCallBack(() -> {
                        switch (jumpType){
                            case 1:
                                startActivity(PayActivity.this, MainActivity.class);
                            case 2:
                                startActivity(PayActivity.this, MainActivity.class);
                                break;
                            case 3:
                                finish();
                                break;
                        }
                    })
                    .completeText("立即支付")
                    .completeCallBack(() -> {

                    }).show();
        });
        payPresenter = new PayPresenter();
        payPresenter.attachView(this);
    }

    @Override
    protected void initData() {
        initMessageBeans();
        initAgreement();
        loginModel = new WXLoginModel();
    }

    /**
     * 创建订单
     */
    private void sendPayRequest() {
        Map<String, Object> map = new HashMap<>();
        map.put("redirectUrl", "https://resource.weimingfang.com/payH5/index.html#/app-pay");
        map.put("type", type);
        payPresenter.payRequest(map);
        showLoading("请稍候");
    }

    /**
     * 初始化弹窗数据
     */
    private void initMessageBeans() {
        messageBeans = new ArrayList<>();
        messageBeans.add(new PayMessageBean("随时修改", "支付成功后，您可以看到刚才记录的内容，并且可以随时修改，无次数限制。修改后，也不需要再次支付任何费用。修改结果实时生效，若您发生意外后，移交给联系人的也是最新内容！"));
        messageBeans.add(new PayMessageBean("永久保存", "采用全球顶级分布式储存技术，每一份信息都“上链”储存。军工级电子证据加密，外加阿里云全球7个数据中心实时同步。保障您存放的内容，安全永不丢失！"));
        messageBeans.add(new PayMessageBean("法律认可", "依据中华人民共和国法律最新《民法典》第六编-第三章-第一千一百三十三条至第一千一百四十四条相关规定，予以实施。于2020年5月28日通过主席令签署，自2021年1月1日起施行。"));
        messageBeans.add(new PayMessageBean("关注健康", "平台上千名工作人员，通过多个支付平台数据、多个手机系统厂商数据，公安部人口大数据平台，以及全国联网的医院、火葬场、殡仪馆等多个数据合作方。结合在意外发生后的人工线下专人核实，主动实时获取您真实的健康状态。"));
        messageBeans.add(new PayMessageBean("专人善后", "经平台大数据分析监控，及人工一对一核实之后，若确认您真实发生意外。会第一时间，再次和您本人联系确认，然后再和联系人联系确认。并由专人对接，转交您在平台留下的所有完整内容。也会协助联系人，为您处理后事 ..."));
        messageBeans.add(new PayMessageBean("全天服务", "截至目前，平台有820名全国顶级专家，以及上千名技术/客服团队。7X24小时，节假日无休，全天轮岗提供服务支持！"));
        messageBeans.add(new PayMessageBean("遗嘱专家指导", "针对专业遗嘱，以及重要事务的善后移交处理。平台有820名全国顶级专家，可通过微信/电话/线下面对面等方式，为您提供遗嘱继承相关的各种咨询、指导、遗嘱代写等服务。"));
        messageBeans.add(new PayMessageBean("心理健康治疗", "如果您遇到家庭矛盾、情场失意、生意亏损、学业不佳、人生充满迷失和无助.....在这种时候，可以通过平台的“心理辅导”联系专业的心理医生，为您排忧解难、疏导内心的各种不愉悦。"));
        messageBeans.add(new PayMessageBean("危急时刻关注", "如果您正在或者即将遭遇困难，尤其是可能存在生命危险的时候。可以马上联系平台客服，实时的通过微信或电话，和您保持联系，确保在您发生意外后，第一时间通知当地警务、医疗人员赶达现场！"));
        messageBeans.add(new PayMessageBean("纸质材料保管", "针对专业遗嘱，平台可代为保管自书纸质材料。并承担后期材料移交的相关责任。针对其它日常重要事务，若涉及纸质文献/档案/材料的，平台也可代为保管，并负责后期移交。"));

    }

    /**
     * 初始化协议文本
     */
    private void initAgreement() {
        String str = "点击每项服务，可以查看详细说明。支付即代表您明白并同意常见问题中的所有内容。其它疑问，可联系 在线客服 >";
        SpannableStringBuilder span = new SpannableStringBuilder(str);
        span.setSpan(new ClickableSpan() {
            @Override
            public void onClick(@NonNull View widget) {
                Bundle bundle=new Bundle();
                bundle.putString("title","联系客服");
                bundle.putString("url", Constants.LIANXIKEFU);
                startActivity(PayActivity.this, WebActivity.class,bundle);
            }

            @Override
            public void updateDrawState(@NonNull TextPaint ds) {
                ds.setColor(getResources().getColor(R.color.btn_color_blue));
            }
        }, str.length() - 6, str.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
        span.setSpan(new ClickableSpan() {
            @Override
            public void onClick(@NonNull View widget) {
                Bundle bundle=new Bundle();
                bundle.putString("title","联系客服");
                bundle.putString("url", Constants.QUESTION_PAY);
                startActivity(PayActivity.this, WebActivity.class,bundle);
            }

            @Override
            public void updateDrawState(@NonNull TextPaint ds) {
                ds.setColor(getResources().getColor(R.color.btn_color_blue));
            }
        }, 27, 31, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
        agreement_tv.setMovementMethod(LinkMovementMethod.getInstance());
        agreement_tv.setText(span);

    }

    @OnClick(value = {R.id.pay_piv0, R.id.pay_piv1
            , R.id.pay_piv2, R.id.pay_piv3, R.id.pay_piv4
            , R.id.pay_piv5, R.id.pay_piv6, R.id.pay_piv7
            , R.id.pay_piv8, R.id.pay_piv9, R.id.addCheck_lin
            , R.id.pay_tv})
    public void click(View v) {
        switch (v.getId()) {
            case R.id.pay_piv0:
                showContentDialog(0);
                break;
            case R.id.pay_piv1:
                showContentDialog(1);
                break;
            case R.id.pay_piv2:
                showContentDialog(2);
                break;
            case R.id.pay_piv3:
                showContentDialog(3);
                break;
            case R.id.pay_piv4:
                showContentDialog(4);
                break;
            case R.id.pay_piv5:
                showContentDialog(5);
                break;
            case R.id.pay_piv6:
                showContentDialog(6);
                break;
            case R.id.pay_piv7:
                showContentDialog(7);
                break;
            case R.id.pay_piv8:
                showContentDialog(8);
                break;
            case R.id.pay_piv9:
                showContentDialog(9);
                break;

            case R.id.addCheck_lin:
                addCheck = !addCheck;
                checkUI();
                break;

            case R.id.pay_tv:
                sendPayRequest();
                break;
        }

    }

    /**
     * 切换选择UI
     */
    private void checkUI() {
        if (addCheck) {
            addCheck_lin.setBackground(getResources().getDrawable(R.drawable.pay_addlin_bg));
            price_tv.setText("100");
            addCheck_cb.setChecked(true);
            type = 2;

        } else {
            addCheck_lin.setBackgroundColor(Color.WHITE);
            price_tv.setText("99");
            addCheck_cb.setChecked(false);
            type = 1;
        }
    }

    /**
     * 弹窗
     *
     * @param position
     */
    private void showContentDialog(int position) {
        BottomDialog.DialogBuilder(PayActivity.this)
                .title(messageBeans.get(position).getTitle())
                .message(messageBeans.get(position).getMessage())
                .cancleText("了解更多")
                .othersCallBack(() -> {
                    Bundle bundle = new Bundle();
                    bundle.putString("title", "支付问题");
                    bundle.putString("url", Constants.QUESTION_PAY);
                    startActivity(PayActivity.this, WebActivity.class, bundle);
                })
                .completeText("知道了")
                .show();
    }

    @Override
    public void onBackPressedSupport() {
        BottomDialog.DialogBuilder(PayActivity.this)
                .title("重要提示")
                .message("您还没有进行支付，平台提供的所有服务，都未生效。支付后，才能修改内容，和使用平台提供的功能服务！")
                .cancleText("离开")
                .othersCallBack(() -> {
                    switch (jumpType){
                        case 1:
                            startActivity(PayActivity.this, MainActivity.class);
                        case 2:
                            startActivity(PayActivity.this, MainActivity.class);
                            break;
                        case 3:
                            finish();
                            break;
                    }
                })
                .completeText("立即支付")
                .completeCallBack(() -> {

                }).show();
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == 1) {
            sendUserRequest();
        }
    }

    /**
     * 获取用户信息
     */
    private void sendUserRequest() {
        loginModel.getUser(new BaseObserver<WXLoginBean>() {
            @Override
            public void onSuccess(BaseResultBean<WXLoginBean> t) {
                LogUtil.i("获取用户信息" + t.getData().toString());
                Utils.saveUser(t.getData());
                if (t.getData().getHasPay()) {
                    EventBus.getDefault().post(new PayEvent());
                    Bundle bundle=new Bundle();
                    bundle.putInt("type",jumpType);
                    if(jumpType==2){
                        bundle.putString("recordId",recordId);
                    }
                    startActivity(PayActivity.this, PaySuccessActivity.class,bundle);
                    finish();
                }
            }

            @Override
            public void onError(String errMessage) {
                LogUtil.i("获取用户信息" + errMessage);
            }
        }, lifecycleSubject);
    }

    @Override
    public void onPaySuccess(String payUrl) {
        Intent intent=new Intent(PayActivity.this, WebActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("url", "https://resource.weimingfang.com/payH5/index.html#/app-pay?wxPayUrl=" + encodeUrl(payUrl));
        bundle.putString("title", "支付");
        intent.putExtras(bundle);
        startActivityForResult(intent, 2);
    }

    public static String encodeUrl(String url) {
        return URLEncoder.encode(url);
    }

}